package JavaSE.ThreadLearning.ExecutorLearning.Demo01;

import java.util.concurrent.*;

/**
 *  测试 -- 线程池的使用和submit方法的返回值问题
 *      submit传入第二个参数后，线程执行完毕将返回一个Future类对象
 *      该对象保存第二个参数的值，并且可以通过get()方法获取到
 *
 *      另外，线程池Executors的使用，是直接通过类名.方法名的方式调用的
 *      因为创建线程池的方法为静态方法
 *      所以直接使用 Executors.newCachedThreadPool() 这样的格式调用就可以
 *      返回的是一个ExecutorService对象，里面就是线程池
 */
public class TestDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException, TimeoutException {
        MyThread myThread = new MyThread();
        int result = 34;
        ExecutorService executorService = Executors.newCachedThreadPool();
        //System.out.println(executorService.submit(myThread, result));
        Future getResult = executorService.submit(myThread, result);
        //System.out.println(getResult.get(2, TimeUnit.SECONDS));
        try {
            getResult.get(2, TimeUnit.SECONDS);
        } catch (Exception e) {
            executorService.shutdownNow();
            System.out.println("线程已关闭");
        }
    }
}
